// 封装uni.request
// 统一处理token
// 统一错误处理
// 请求拦截器
// 响应拦截器 

const baseURL = 'https://paintasong.cn/api'

// 请求拦截器
const requestInterceptor = (config) => {
  // 添加token
  const token = uni.getStorageSync('token')
  if (token) {
    config.header = {
      ...config.header,
      'Authorization': `Bearer ${token}`
    }
  }
  return config
}

// 响应拦截器
const responseInterceptor = (response) => {
  const { code, message, data } = response.data
  
  if (code === 0) {
    return data
  }
  
  // token过期
  if (code === 401) {
    uni.removeStorageSync('token')
    uni.redirectTo({
      url: '/pages/login/index'
    })
    return Promise.reject(new Error('token过期'))
  }
  
  uni.showToast({
    title: message || '请求失败',
    icon: 'none'
  })
  return Promise.reject(new Error(message))
}

// 请求方法
const request = (options) => {
  const config = requestInterceptor({
    ...options,
    url: baseURL + options.url
  })
  
  return new Promise((resolve, reject) => {
    uni.request({
      ...config,
      success: (res) => {
        resolve(responseInterceptor(res))
      },
      fail: (err) => {
        uni.showToast({
          title: '网络错误',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

export default request 